<!DOCTYPE HTML>
<html>
<head>
  <meta charset="utf-8">
  <title>Various touch tests that spawn in new windows</title>
  <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
  <script type="application/javascript" src="apz_test_native_event_utils.js"></script>
  <script type="application/javascript" src="apz_test_utils.js"></script>
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
  <script type="application/javascript">

var basic_pan_prefs = [
  // Dropping the touch slop to 0 makes the tests easier to write because
  // we can just do a one-pixel drag to get over the pan threshold rather
  // than having to hard-code some larger value.
  ["apz.touch_start_tolerance", "0.0"],
  // The touchstart from the drag can turn into a long-tap if the touch-move
  // events get held up. Try to prevent that by making long-taps require
  // a 10 second hold. Note that we also cannot enable chaos mode on this
  // test for this reason, since chaos mode can cause the long-press timer
  // to fire sooner than the pref dictates.
  ["ui.click_hold_context_menus.delay", 10000],
  // The subtests in this test do touch-drags to pan the page, but we don't
  // want those pans to turn into fling animations, so we increase the
  // fling min velocity requirement absurdly high.
  ["apz.fling_min_velocity_threshold", "10000"],
  // The helper_div_pan's div gets a displayport on scroll, but if the
  // test takes too long the displayport can expire before the new scroll
  // position is synced back to the main thread. So we disable displayport
  // expiry for these tests.
  ["apz.displayport_expiry_ms", 0],
];

var touch_action_prefs = basic_pan_prefs.slice(); // make a copy
touch_action_prefs.push(["layout.css.touch_action.enabled", true]);

var isWindows = (getPlatform() == "windows");

var subtests = [
  // Simple tests to exercise basic panning behaviour
  {'file': 'helper_basic_pan.html', 'prefs': basic_pan_prefs},
  {'file': 'helper_div_pan.html', 'prefs': basic_pan_prefs},
  {'file': 'helper_iframe_pan.html', 'prefs': basic_pan_prefs},

  // Simple test to exercise touch-tapping behaviour
  {'file': 'helper_tap.html'},
  // Tapping, but with a full-zoom applied
  {'file': 'helper_tap_fullzoom.html'},

  // For the following two tests, disable displayport suppression to make sure it
  // doesn't interfere with the test by scheduling paints non-deterministically.
  {'file': 'helper_scrollto_tap.html?true', 'prefs': [["apz.paint_skipping.enabled", true]], 'dp_suppression': false},
  {'file': 'helper_scrollto_tap.html?false', 'prefs': [["apz.paint_skipping.enabled", false]], 'dp_suppression': false},

  // Taps on media elements to make sure the touchend event is delivered
  // properly. We increase the long-tap timeout to ensure it doesn't get trip
  // during the tap.
  // Also this test (on Windows) cannot satisfy the OS requirement of providing
  // an injected touch event every 100ms, because it waits for a paint between
  // the touchstart and the touchend, so we have to use the "fake injection"
  // code instead.
  {'file': 'helper_bug1162771.html', 'prefs': [["ui.click_hold_context_menus.delay", 10000],
                                               ["apz.test.fails_with_native_injection", isWindows]]},

  // As with the previous test, this test cannot inject touch events every 100ms
  // because it waits for a long-tap, so we have to use the "fake injection" code
  // instead.
  {'file': 'helper_long_tap.html', 'prefs': [["apz.test.fails_with_native_injection", isWindows]]},

  // For the following test, we want to make sure APZ doesn't wait for a content
  // response that is never going to arrive. To detect this we set the content response
  // timeout to a day, so that the entire test times out and fails if APZ does
  // end up waiting.
  {'file': 'helper_tap_passive.html', 'prefs': [["apz.content_response_timeout", 24 * 60 * 60 * 1000],
                                                ["apz.test.fails_with_native_injection", isWindows]]},

  // Simple test to exercise touch-action CSS property
  {'file': 'helper_touch_action.html', 'prefs': touch_action_prefs},
  // More complex touch-action tests, with overlapping regions and such
  {'file': 'helper_touch_action_complex.html', 'prefs': touch_action_prefs},
  // Tests that touch-action CSS properties are handled in APZ without waiting
  // on the main-thread, when possible
  {'file': 'helper_touch_action_regions.html', 'prefs': touch_action_prefs},
];

if (isApzEnabled()) {
  ok(window.TouchEvent, "Check if TouchEvent is supported (it should be, the test harness forces it on everywhere)");
  if (getPlatform() == "android") {
    // This has a lot of subtests, and Android emulators are slow.
    SimpleTest.requestLongerTimeout(2);
  }

  SimpleTest.waitForExplicitFinish();
  window.onload = function() {
    runSubtestsSeriallyInFreshWindows(subtests)
    .then(SimpleTest.finish);
  };
}

  </script>
</head>
<body>
</body>
</html>
